package com.liu.qqRobot.wiki.handler;

import com.liu.common.utils.QQClientUtils;
import com.liu.common.utils.WikiClientUtils;
import com.liu.mybatisPlus.q.service.QGroupUserOperationQuantityService;
import com.liu.qqRobot.event.entity.dto.EventReportingDTO;
import com.liu.qqRobot.q.enums.OperationTypeEnum;
import com.liu.qqRobot.wiki.entity.dto.WikiSearchDTO;
import com.liu.qqRobot.wiki.entity.dto.WikiSearchResultDTO;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class WikiHandler {

    @Resource
    private QGroupUserOperationQuantityService qGroupUserOperationQuantityService;

    /**
     * 处理事件
     * @param data 信息内容
     * @param groupId 群号
     * @param userId 发送人QQ号
     */
    public void handler(EventReportingDTO.Message.Data data, Long groupId, Long userId, Boolean isGroup) {
        String text = data.getText();
        String param = text.replace("wiki ", "");
        // 先直接请求一次看看能不能返回
        Boolean requestTrue = this.initMsgAndSend(param, param, userId, groupId, isGroup);
        // 如果没有返回
        if (!requestTrue) {
            // 查询关键词匹配的物品
//            List<WmItem> keyWordMatchs = wmItemKeyWordService.getKeyWordMatch(param);
//            if (keyWordMatchs.size() == 1) {
//                WmItem wmItem = keyWordMatchs.get(0);
//                requestTrue = this.initMsgAndSend(param, wmItem.getItemName(), userId, groupId);
//                if (!requestTrue) {
//                    QQClientUtils.sendGroupMsg("[CQ:at,qq=" + userId + "]无法在灰机wiki中找到该物品", groupId);
//                }
//                return;
//            }
//            if (keyWordMatchs.size() > 1) {
//                StringBuilder msg = new StringBuilder("[CQ:at,qq=" + userId + "]\n以下有多个匹配的结果，请确认你要查询的物品：\n");
//                for (WmItem wmItem : keyWordMatchs) {
//                    msg.append("【").append(wmItem.getItemName()).append("】  ");
//                }
//                msg.append("\n如果你想要关键词匹配，请输入：添加关键词匹配 [匹配物品名称] [关键词]");
//                QQClientUtils.sendGroupMsg(msg.toString(), groupId);
//            } else {
//                QQClientUtils.sendGroupMsg("[CQ:at,qq=" + userId + "]\n无法找到你想要查询的物品，请确认名称是否准确", userId, groupId, isGroup);
//            }
        }
    }

    /**
     * 初始化发送的信息并发送
     * @param param 用户查询的关键词
     * @param itemName 物品itemName
     * @param userId 发送人QQ号
     * @param groupId 群号
     */
    private Boolean initMsgAndSend(String param, String itemName, Long userId, Long groupId, Boolean isGroup) {
        WikiSearchDTO wikiSearchDTO = WikiClientUtils.search(itemName);
        if (wikiSearchDTO != null) {
            List<WikiSearchResultDTO> wikiSearchResultDTOS = wikiSearchDTO.getWikiSearchResultDTOS();
            StringBuilder msg = new StringBuilder("[CQ:at,qq=" + userId + "]\n");
            msg.append("搜索词：").append(param).append("\n").append("--------------------").append("\n");
            for (int i = 0; i < wikiSearchResultDTOS.size(); i++) {
                WikiSearchResultDTO wikiSearchResultDTO = wikiSearchResultDTOS.get(i);
                msg.append("搜索结果").append(i + 1).append("：\n")
                        .append("名称：").append(wikiSearchResultDTO.getName()).append("\n")
                        .append("简介：").append(wikiSearchResultDTO.getBriefIntroduction()).append("\n")
                        .append("灰机wiki链接：").append(wikiSearchResultDTO.getUrl()).append("\n")
                        .append("--------------------").append("\n");
            }
            QQClientUtils.sendMsg(msg.toString(), userId, groupId, isGroup);
            qGroupUserOperationQuantityService.statisticsOperationQuantityByType(groupId, userId, OperationTypeEnum.WIKI);
            return true;
        } else {
            return false;
        }
    }

}
